//#include<iostream>
//using namespace std;
//struct node
//{
//	int p;
//	int c;
//};
//using ll = long long;
//node g[1010] = { 0 };
//ll v[1010] = { 0 };
//int main()
//{
//	ll  n, S;
//	cin >> n >> S;
//	ll lonely_cost = 0;
//	for (int i = 0; i < n; i++)
//	{
//		cin >> g[i].p >> g[i].c;
//		lonely_cost += g[i].p;
//	}
//	ll sum = 0;
//	while(lonely_cost >= S)
//	{
//		sum += S;
//		for (int i = 0; i < n && g[i].c > 0 && !v[g[i].c]; i++)
//		{
//			g[i].c--;
//			if (g[i].c == 0)
//			{
//				lonely_cost -= g[i].p;
//			}
//		}
//	}
//	while (lonely_cost < S)
//	{
//		sum += lonely_cost;
//		for (int i = 0; i < n && g[i].c > 0 && !v[g[i].c]; i++)
//		{
//			g[i].c--;
//			if (g[i].c == 0)
//			{
//				lonely_cost -= g[i].p;
//			}
//		}
//	}
//	cout << sum << endl;
//}
#include<iostream>
#include<algorithm>
using namespace std;
using ll = long long;
struct node
{
	ll p;
	ll c;
};
node g[100010] = { 0 };
ll pre_sum[100010] = { 0 };
int main()
{
	ll  n, S;
	cin >> n >> S;
	for (int i = 1; i <= n; i++)
	{
		cin >> g[i].p >> g[i].c;
	}
	sort(g + 1, g + 1 + n, [](const node& a, const node& b)
		{
			return a.c > b.c;
		});
	for (int i = 1; i <= n; i++)
	{
		pre_sum[i] = pre_sum[i - 1] + g[i].p;
	}
	int i = n + 1;
	while (pre_sum[i - 1] >= S)
	{
		i--;
	}
	int cnt = g[i].c;
	ll sum = 0;
	sum = g[i].c * S;
	while (i >= 1)
	{
		sum += (g[i].c - cnt) * g[i].p;
		i--;
	}
	cout << sum << endl;
}
